package com.uh.calculation.operator;

import com.uh.calculation.bean.*;
import com.uh.calculation.util.FormulaUtil;
import com.uh.calculation.util.GetBean;
import com.uh.calculation.util.GetFileds;
import com.uh.calculation.util.TimeUtil;
import com.uh.microservice.core.dao.JdbcDao;
import lombok.Data;
import org.apache.commons.lang.StringUtils;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 关于调整的计算
 * 适用于场景   同一张表  本月某字段与上月某字段相加  后与其中一字段相比较
 */
@Data
public class Tz1Operator {

    private JdbcDao jdbcDao;
    private WarnJiSuanBean warnJiSuanBean;


    public Tz1Operator(JdbcDao jdbcDao, WarnJiSuanBean warnJiSuanBean) {
        this.jdbcDao = jdbcDao;
        this.warnJiSuanBean = warnJiSuanBean;

    }

    /**
     * 单表数据
     *
     * @param list
     * @return
     */
    public void jisuan(List<Map<String, Object>> ls, List<OperatorVal> list) {
        if (ls == null || ls.size() == 0) {
            return;
        }
        this.warnJiSuanBean = warnJiSuanBean;
        Date lastTime = warnJiSuanBean.getLastTime();
        //反转2021 与 2022字段区别
        //GetFileds getFileds = new GetFileds(jdbcDao,list,warnJiSuanBean);
        for (OperatorVal operatorVal : list) {
            List<FormulaBean> formulaBeans = operatorVal.getFormulaBeans();//计算公式
            String field = operatorVal.getField();
            List<TbFeild> tbFeilds = GetBean.getTbf(field);
            String f1 = tbFeilds.get(0).getFieldName();
            String f2 = tbFeilds.get(1).getFieldName();
            for (int i = 0; i < ls.size(); i++) {
                try {
                    Map m = ls.get(i);
                    //时间判断
                    String timeCode = m.get("time_code").toString();
                    //时间游标判断，及核查规则是否符合
                    if (TimeUtil.bj(lastTime, timeCode, warnJiSuanBean.getYear_is_month(), warnJiSuanBean.getIs_hc())) {
                        String d1 = ls.get(i).get(f1).toString();
                        String d2 = ls.get(i - 1).get(f2).toString();
                        //根据当前计算类解析规则  将数据和字段对应
                        tbFeilds.get(0).setData(d1);
                        tbFeilds.get(1).setData(d2);
                        //扔进公式解析工具
                        new FormulaUtil(tbFeilds, formulaBeans, warnJiSuanBean, operatorVal.getDimension(), timeCode);
                    }
                } catch (Exception e) {
                }
            }
        }
    }


}
